<?php
/**
 * 定义f:errors控件，用来显示一组或全部控件的错误信息
 * 
 * 可以使用的参数：
 * - for - <string> 对应的控件ID列表，如 for="username,password"，要想屏蔽默认的错误消息绘制，可以在对应的表单控件上加入 error.render=false 属性
 * - first - <boolean> 是否只显示第一个错误，默认为true; 否则会显示所有错误
 * - layout.* - <array> 布局
 *
 * @package if
 * @subpackage module.ui
 * @since 1.1.0
 */
class UIFormErrors extends UIControl {
	function render() {
		$for = $this->attr("for");
		$firstError = $this->attr("first");
		if (!$for) {
			$errors = $this->controller->form()->errors(is_null($firstError) || $firstError);
			return $this->processLayout($errors);
		}
		$fors = preg_split("/\s*,\s*/", $for);
		$errors = array();
		foreach ($fors as $for) {
			$control = UIContainer::instance()->get($for);
			if (if_is_instance_of($control, "UIFormElement") && $control->hasErrors()) {
				if (!$control->hasError()) {
					continue;
				}
				if (is_null($firstError) || $firstError) {
					$errors = array_merge($errors, array($control->firstError()));
				}
				else {
					$errors = array_merge($errors, $control->errors());
				}
			}
		}
		return $this->processLayout($errors);
	}
}

?>